import globals from 'globals'
import pluginJs from '@eslint/js'
import tseslint from 'typescript-eslint'
import pluginVue from 'eslint-plugin-vue'
import eslintPluginPrettier from 'eslint-plugin-prettier/recommended'

/** @type {import('eslint').Linter.Config[]} */

export default [
  { files: ['**/*.{js,mjs,cjs,ts,vue}'] },
  { languageOptions: { globals: { ...globals.browser, ...globals.node } } },
  // js 推荐的配置
  pluginJs.configs.recommended,
  // ts 推荐的配置
  ...tseslint.configs.recommended,
  ...pluginVue.configs['flat/essential'],
  {
    files: ['**/*.vue'],
    languageOptions: { parserOptions: { parser: tseslint.parser } }
  },
  {
    rules: {
      // 'no-console': 'error',
      '@typescript-eslint/no-unused-vars': 'error',
      'vue/multi-word-component-names': 'off', // 关闭 vue组件名称必须是多词的校验
      '@typescript-eslint/no-explicit-any': 'off', // 关闭 不能出现 any 校验
      quotes: ['error', 'double'],
      'no-undef': 'error', // 不允许使用没有定义的变量
      '@typescript-eslint/no-require-imports': 'off'
    }
  },
  eslintPluginPrettier // 解决 prettier 和 eslint 的冲突，比如 eslint 里面是 开启 双引号，prettier 里面开启单引号
  // 是按照顺序，进行覆盖的 ，如若想保留 'no-console': 'error', 就得在下面继续添加一个 .... 又好像和这个没关系
  // {
  //   rules: {
  //     'no-console': 'error'
  //   }
  // }
]
